package com.hczt.fire.framework.swagger.properties;

import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * @author marvin.ma
 * @create 2017-09-05 11:14
 * @desc swagger自动配置
 **/
@Data
@ConfigurationProperties("swagger")
public class SwaggerProperties {

  /**标题**/
  private String title = "";
  /**描述**/
  private String description = "";
  /**版本**/
  private String version = "";
  /**许可证**/
  private String license = "";
  /**许可证URL**/
  private String licenseUrl = "";
  /**服务条款URL**/
  private String termsOfServiceUrl = "";

  private Contact contact = new Contact();

  /**swagger会解析的包路径**/
  private String basePackage = "";

  /**swagger会解析的url规则**/
  private List<String> basePath = new ArrayList<>();
  /**在basePath基础上需要排除的url规则**/
  private List<String> excludePath = new ArrayList<>();

  /**分组文档**/
  private Map<String, DocketInfo> docket = new LinkedHashMap<>();

  /**host信息**/
  private String host = "";

  @Data
  @NoArgsConstructor
  public static class DocketInfo {

    /**标题**/
    private String title = "";
    /**描述**/
    private String description = "";
    /**版本**/
    private String version = "";
    /**许可证**/
    private String license = "";
    /**许可证URL**/
    private String licenseUrl = "";
    /**服务条款URL**/
    private String termsOfServiceUrl = "";

    private Contact contact = new Contact();

    /**swagger会解析的包路径**/
    private String basePackage = "";

    /**swagger会解析的url规则**/
    private List<String> basePath = new ArrayList<>();
    /**在basePath基础上需要排除的url规则**/
    private List<String> excludePath = new ArrayList<>();

    public String getTitle() {
      return title;
    }

    public void setTitle(String title) {
      this.title = title;
    }

    public String getDescription() {
      return description;
    }

    public void setDescription(String description) {
      this.description = description;
    }

    public String getVersion() {
      return version;
    }

    public void setVersion(String version) {
      this.version = version;
    }

    public String getLicense() {
      return license;
    }

    public void setLicense(String license) {
      this.license = license;
    }

    public String getLicenseUrl() {
      return licenseUrl;
    }

    public void setLicenseUrl(String licenseUrl) {
      this.licenseUrl = licenseUrl;
    }

    public String getTermsOfServiceUrl() {
      return termsOfServiceUrl;
    }

    public void setTermsOfServiceUrl(String termsOfServiceUrl) {
      this.termsOfServiceUrl = termsOfServiceUrl;
    }

    public Contact getContact() {
      return contact;
    }

    public void setContact(Contact contact) {
      this.contact = contact;
    }

    public String getBasePackage() {
      return basePackage;
    }

    public void setBasePackage(String basePackage) {
      this.basePackage = basePackage;
    }

    public List<String> getBasePath() {
      return basePath;
    }

    public void setBasePath(List<String> basePath) {
      this.basePath = basePath;
    }

    public List<String> getExcludePath() {
      return excludePath;
    }

    public void setExcludePath(List<String> excludePath) {
      this.excludePath = excludePath;
    }
  }

  @Data
  @NoArgsConstructor
  public static class Contact {

    /**联系人**/
    private String name = "";
    /**联系人url**/
    private String url = "";
    /**联系人email**/
    private String email = "";

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public String getUrl() {
      return url;
    }

    public void setUrl(String url) {
      this.url = url;
    }

    public String getEmail() {
      return email;
    }

    public void setEmail(String email) {
      this.email = email;
    }
  }


  public String getTitle() {
    return title;
  }

  public void setTitle(String title) {
    this.title = title;
  }

  public String getDescription() {
    return description;
  }

  public void setDescription(String description) {
    this.description = description;
  }

  public String getVersion() {
    return version;
  }

  public void setVersion(String version) {
    this.version = version;
  }

  public String getLicense() {
    return license;
  }

  public void setLicense(String license) {
    this.license = license;
  }

  public String getLicenseUrl() {
    return licenseUrl;
  }

  public void setLicenseUrl(String licenseUrl) {
    this.licenseUrl = licenseUrl;
  }

  public String getTermsOfServiceUrl() {
    return termsOfServiceUrl;
  }

  public void setTermsOfServiceUrl(String termsOfServiceUrl) {
    this.termsOfServiceUrl = termsOfServiceUrl;
  }

  public Contact getContact() {
    return contact;
  }

  public void setContact(Contact contact) {
    this.contact = contact;
  }

  public String getBasePackage() {
    return basePackage;
  }

  public void setBasePackage(String basePackage) {
    this.basePackage = basePackage;
  }

  public List<String> getBasePath() {
    return basePath;
  }

  public void setBasePath(List<String> basePath) {
    this.basePath = basePath;
  }

  public List<String> getExcludePath() {
    return excludePath;
  }

  public void setExcludePath(List<String> excludePath) {
    this.excludePath = excludePath;
  }

  public Map<String, DocketInfo> getDocket() {
    return docket;
  }

  public void setDocket(Map<String, DocketInfo> docket) {
    this.docket = docket;
  }

  public String getHost() {
    return host;
  }

  public void setHost(String host) {
    this.host = host;
  }
}
